Código Final Jogo da Forca
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
int vidasRestantes = 6;
String letrasCertas = "";
String letrasTentadas = "";
char letraChutada;
String palavra = "treme";
boolean ganhou = false;
// contagem de vidas
do {
limparTela();
System.out.println("\n\nVidas Restantes: " + vidasRestantes);
System.out.println("Letras já Tentadas: " + letrasTentadas + "\n");
exibeForca(vidasRestantes);
exibePalavraTela(palavra, letrasCertas);
System.out.println("\n\n");
// impedir letras já tentadas
while (true) {
System.out.print("Digite uma letra: ");
String entrada = teclado.nextLine().toLowerCase();
// evita vazio
if (entrada.isEmpty())
continue;
letraChutada = entrada.charAt(0);
if (letrasTentadas.contains(Character.toString(letraChutada))) {
System.out.println("Você já tentou essa letra. Digite outra!");
} else {
break;
}
}
// atualiza letras tentadas
letrasTentadas += letraChutada;
// verifica acerto
if (acertouLetra(palavra, letraChutada))
letrasCertas += letraChutada;
else
vidasRestantes--;
// verificar se a palavra foi descoberta
if (palavraCompleta(palavra, letrasCertas)) {
ganhou = true;
break;
}
} while (vidasRestantes > 0);
// mensagem final
System.out.println("\n======================================");
if (ganhou) {
System.out.println("PARABÉNS! Você ganhou!");
} else {
limparTela();
System.out.println("Você perdeu!");
System.out.println("\nA palavra era: " + palavra + "\n");
exibeForca(0);
}
System.out.println("");
teclado.close();
}
static boolean acertouLetra(String palavra, char letraChutada) {
return palavra.contains(Character.toString(letraChutada));
}
static void exibePalavraTela(String palavraSecreta, String letrasCertas) {
char letra;
System.out.println("\n\n");
for (int posicaoLetra = 0; posicaoLetra < palavraSecreta.length(); posicaoLetra++) {
letra = palavraSecreta.charAt(posicaoLetra);
if (letrasCertas.contains(Character.toString(letra))) {
System.out.print(" _" + letra + "_ ");
} else {
System.out.print(" ____ ");
}
}
}
// verifica se todas as letras foram descobertas
static boolean palavraCompleta(String palavra, String letrasCertas) {
for (int i = 0; i < palavra.length(); i++) {
char letra = palavra.charAt(i);
if (!letrasCertas.contains(Character.toString(letra))) {
return false;
}
}
return true;
}
// limpa a tela do console
static void limparTela() {
try {
// Para Windows
if (System.getProperty("os.name").toLowerCase().contains("win")) {
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
} else {
// Linux / Mac
System.out.print("\033[H\033[2J");
System.out.flush();
}
} catch (Exception e) {
// Se não funcionar, imprime várias linhas para "simular" limpeza
for (int i = 0; i < 50; i++)
System.out.println();
}
}
static void exibeForca(int contagemErro) {
switch (contagemErro) {
case 6:
System.out.println("""
+---+
| |
|
|
|
|
========= """);
break;
case 5:
System.out.println("""
+---+
| |
O |
|
|
|
========= """);
break;
case 4:
System.out.println("""
+---+
| |
O |
| |
|
|
========= """);
break;
case 3:
System.out.println("""
+---+
| |
O |
/| |
|
|
========= """);
break;
case 2:
System.out.println("""
+---+
| |
O |
/|\\ |
|
|
========= """);
break;
case 1:
System.out.println("""
+---+
| |
O |
/|\\ |
/ |
|
========= """);
break;
case 0:
System.out.println("""
+---+
| |
O |
/|\\ |
/ \\ |
|
========= """);
break;
default:
break;
}
}
}